#ifndef SUPERBLOCK_H_
#define SUPERBLOCK_H_

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <fstream>
#include <math.h>
#include "Inode.h"
//class Inode;

using namespace std;

class SuperBlock
{
private:
	int _fileSystemSize;
	int _blockSize;
	int _rootInodeNumber;
	int _freeBlocksNum;
	int _numOfBlocks;
	int _firstFreeBlockOffset;
    int _lastBlockOffset;
    int _iNodeArraySize;
    int _freeInodesNum;
    int _firstFreeInodeOffset;
    int _lastInodeOffset;
    int _freeBlockListOffsetOutsideSB;
    int _freeInodeListOffsetOutsideSB;
    int _rootInodeOffset;
    int _numOfInodeNodes;
    int _numOfBlockNodes;
    int _pointersPerBlock;
    int _entriesPerBlock;
    void iNodeBlockSwap();

public:
    SuperBlock();
    ~SuperBlock();
    int getEntriesPerBlock();
    void printSB();
    void calc();
    int getFileSystemSize();
    void setFileSystemSize(int fileSystemSize);
    int getBlockSize();
    void setBlockSize(int blockSize);
    int getRootInodeNumber();
    int getFreeBlocksNum();
    void setFreeBlocksNum(int freeBlocksNum);
    int getINodeArraySize();
    void setNodeArraySize(int iNodeArraySize);
    int getFreeInodesNum();
    void decFreeInodesNum();
    void incFreeInodesNum();

    int getFirstFreeBlockOffset();
    int getFirstFreeInodeOffset();
	void addtoFirstFreeInodeOffset(int offset);
	void addtoFirstFreeBlockOffset(int offset);

    int getLastInodeOffset();
    int getLastBlockOffset();

    int getFreeBlockListOffsetOutsideSB();
    int getFreeInodeListOffsetOutsideSB();
    void setFreeInodeListOffsetOutsideSB(int addr);
    void setFreeBlockListOffsetOutsideSB(int addr);

    int getNumOfInodeListNodes();
    int getNumOfBlockListNodes();

    int getInodeArrayOffset();
    int getInodeNumber(int offset);
    bool SBInodeIsEmpty();
    int getBeginningOfBlock(int add);

    void setLastInodeOffset(int offset);
    void setLastBlockOffset(int offset);

    void decFreeBlocksNum();
    void incFreeBlocksNum();
    bool SBBlockIsEmpty();


};

#endif /* SUPERBLOCK_H_ */

